package com.picture.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.picture.constant.MessageConstant;
import com.picture.mapper.PictureTagMapper;
import com.picture.mapper.TagTypeMapper;
import com.picture.pojo.entity.PictureTag;
import com.picture.pojo.entity.TagType;
import com.picture.result.Result;
import com.picture.service.TagTypeService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class TagTypeServiceImpl implements TagTypeService {

    // 注入TagTypeMapper的接口对象
    @Resource
    private TagTypeMapper tagTypeMapper;

    // 注入PictureTagMapper的接口对象
    @Resource
    private PictureTagMapper pictureTagMapper;

    /**
     * 查找所有的标记类型
     * @return 返回标记类型
     */
    @Override
    public Result<List<TagType>> check() {
        // 查找所有的标记类型
        List<TagType> lists = tagTypeMapper.selectList(new QueryWrapper<>());
        return Result.success(lists);
    }

    /**
     * 添加标记类型
     * @param typeName 标记类型名
     * @return 返回响应结果
     */
    @Override
    public Result<List<TagType>> add(String typeName) {
        // 判断标记类型名是否为空
        if(typeName == null || typeName.equals("")) {
            throw new RuntimeException(MessageConstant.TAG_TYPE_EMPTY);
        }
        // 创建LambdaQueryWrapper条件对象
        LambdaQueryWrapper<TagType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 设置typeName条件
        lambdaQueryWrapper.eq(TagType::getTypeName, typeName);
        // 通过typeName查找数据
        TagType originalTagType = tagTypeMapper.selectOne(lambdaQueryWrapper);
        // 判断数据是否存在
        if (originalTagType != null) {
            throw new RuntimeException(MessageConstant.TAG_TYPE_EXIST);
        }

        // 创建PictureType对象
        TagType tagType = new TagType();
        // 设置标记类型名
        tagType.setTypeName(typeName);
        // 添加标记类型
        tagTypeMapper.insert(tagType);
        // 回显数据
        List<TagType> lists = tagTypeMapper.selectList(new QueryWrapper<>());
        // 返回响应结果
        return Result.success(lists);
    }

    /**
     * 根据id删除标记类型
     * @param id 标记类型id
     * @return 返回响应结果
     */
    @Override
    public Result<List<TagType>> delete(int id) {
        // 创建LambdaQueryWrapper条件对象
        LambdaQueryWrapper<TagType> originalQueryWrapper = new LambdaQueryWrapper<>();
        // 设置typeId条件
        originalQueryWrapper.eq(TagType::getTypeId, id);
        // 通过typeName查找数据
        TagType originalPictureType = tagTypeMapper.selectOne(originalQueryWrapper);
        // 判断数据是否存在
        if (originalPictureType == null) {
            throw new RuntimeException(MessageConstant.TAG_TYPE_NOT_EXIST);
        }
        // 创建LambdaQueryWrapper条件对象
        LambdaQueryWrapper<PictureTag> queryWrapper = new LambdaQueryWrapper<>();
        // 设置TagTypeId条件
        queryWrapper.eq(PictureTag::getTagTypeId, id);
        // 通过TagTypeId查找坐标数据
        List<PictureTag> pictureCoordinateLists = pictureTagMapper.selectList(queryWrapper);
        // 判断数据是否存在
        if (!pictureCoordinateLists.isEmpty()) {
           throw new RuntimeException(MessageConstant.NOT_ALLOW_DELETE);
        }


        // 创建LambdaQueryWrapper条件对象
         LambdaQueryWrapper<TagType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        // 设置typeId条件
         lambdaQueryWrapper.eq(TagType::getTypeId, id);
        // 根据id删除标记类型
        tagTypeMapper.delete(lambdaQueryWrapper);
        // 回显数据
        List<TagType> lists = tagTypeMapper.selectList(new QueryWrapper<>());
        // 返回响应结果
        return Result.success(lists);
    }

}
